package edu.upn.talbd.proventas.dal;

import edu.upn.talbd.proventas.entidades.Cliente;
import edu.upn.talbd.proventas.entidades.Proveedor;
import edu.upn.talbd.proventas.entidades.Telefono;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class ProveedorDAO {
    public void registrar(Proveedor objProveedor) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            String insert = ""
                    + "INSERT INTO proveedor (razonsocial, direccion, email, observaciones) "
                    + "VALUES(" 
                    + "'" + objProveedor.getRazonsocial() + "', "
                    + "'" + objProveedor.getDireccion() + "', "
                    + "'" + objProveedor.getEmail() + "', "
                    + "'" + objProveedor.getObservaciones() + "')";
            stmt.executeUpdate(insert);
            for(Telefono t : objProveedor.objTelefono){
                //System.out.println(“Nombre del Empleado: ” + tmpObjeto.getNombre());
                insert = ""
                    + "INSERT INTO telefonoProveedor (numero, descripcion, idProveedor) "
                    + "VALUES(" 
                    + "'" + t.getNumero() + "', "
                    + "'" + t.getDescripcion() + "', "
                    + "(SELECT MAX(id) AS id FROM proveedor))";
                stmt.executeUpdate(insert);
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public void modificar(Proveedor objProveedor) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            String update = ""
                    + "update proveedor set "
                    + "razonSocial = '" + objProveedor.getRazonsocial()+ "', "
                    + "direccion = '" + objProveedor.getDireccion() + "', "
                    + "email = '" + objProveedor.getEmail() + "', "
                    + "observaciones = '" + objProveedor.getObservaciones() + "' where id = " + objProveedor.getId();
            stmt.executeUpdate(update);
            
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public String eliminar(int idProveedor) {
        
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //String delete = "delete from telefonoEmpleado where idEmpleado = " + idEmpleado;
            //stmt.executeUpdate(delete); 
            
            String delete = "delete from Proveedor where id = " + idProveedor;
            stmt.executeUpdate(delete); 
            
            //5. Cerrar conexion
            stmt.close();
            return "Proveedor eliminado"; 
        } catch (Exception e) {
            e.printStackTrace();
            return "Error al eliminar proveedor"; 
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public ArrayList<Proveedor> buscar(Proveedor objProveedor) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //Un objeto ResultSet, almacena los datos de resultados de una consulta
            ResultSet tabla = stmt.executeQuery("SELECT p.id, p.razonSocial, p.direccion, p.email, p.observaciones "
                                            + "FROM Proveedor p "
                                            + "WHERE p.razonsocial like '%"+objProveedor.getRazonsocial()+"%' ORDER BY p.id");
            
            //System.out.println("Codigo\tNombre");
            ArrayList<Proveedor> coleccion = new ArrayList<Proveedor>();
            while(tabla.next()){
                Proveedor obj = new Proveedor();
                obj.setId(tabla.getInt(1));
                obj.setRazonsocial(tabla.getString(2));
                obj.setDireccion(tabla.getString(3));
                obj.setEmail(tabla.getString(4));
                obj.setObservaciones(tabla.getString(5));
                coleccion.add(obj);
                //System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
            return coleccion;
        } catch (Exception e) {
            e.printStackTrace(); 
            ArrayList<Proveedor> c = new ArrayList<Proveedor>();
            return c;
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public ArrayList<Proveedor> buscar() {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //Un objeto ResultSet, almacena los datos de resultados de una consulta
            ResultSet tabla = stmt.executeQuery("SELECT p.id, p.razonSocial, p.direccion, p.email, p.observaciones "
                                            + "FROM Proveedor p "
                                            + " ORDER BY p.id");
            
            //System.out.println("Codigo\tNombre");
            ArrayList<Proveedor> coleccion = new ArrayList<Proveedor>();
            while(tabla.next()){
                Proveedor obj = new Proveedor();
                obj.setId(tabla.getInt(1));
                obj.setRazonsocial(tabla.getString(2));
                obj.setDireccion(tabla.getString(3));
                obj.setEmail(tabla.getString(4));
                obj.setObservaciones(tabla.getString(5));
                coleccion.add(obj);
                //System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
            return coleccion;
        } catch (Exception e) {
            e.printStackTrace(); 
            ArrayList<Proveedor> c = new ArrayList<Proveedor>();
            return c;
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
}
